#include "FlatpakRepoWidget.h"
#include "ui_FlatpakRepoWidget.h"
#include "NetworkIcon.h"

#include <QVBoxLayout>
#include <qabstractitemmodel.h>
#include <qicon.h>
#include <qlabel.h>
#include <qnamespace.h>
#include <qwidget.h>
#include <QMimeData>
#include <QDragEnterEvent>
#include <QFileInfo>
#include <QSettings>

FlatpakRepoWidget::FlatpakRepoWidget(QWidget *parent) : QWidget(parent)
    ,ui(new Ui::FlatpakRepoWidget)
, m_title(new QLabel)
, m_url(new QLabel)
, m_homepage(new QLabel)
, m_comment(new QLabel)
, m_description(new QLabel)
, m_icon(new QLabel)
, m_gpgkey(new QLabel)
, m_ni(new NetworkIcon)
{

    // [Flatpak Repo]
    // Title=Flathub
    // Url=https://dl.flathub.org/repo/
    // Homepage=https://flathub.org/
    // Comment=Central repository of Flatpak applications
    // Description=Central repository of Flatpak applications
    // Icon=https://dl.flathub.org/repo/logo.svg
    // GPGKey=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
    

    m_icon->setText("icon");
    m_icon->setPixmap(QIcon(":/docs/favicon.ico").pixmap(48,48));
    m_icon->setFixedSize(64,64);
    m_title->setAlignment(Qt::AlignBottom | Qt::AlignLeft);
    m_url->setAlignment(Qt::AlignCenter | Qt::AlignLeft);
    m_homepage->setAlignment(Qt::AlignTop | Qt::AlignLeft);
    m_description->setWordWrap(true);
    m_gpgkey->setWordWrap(true);

    // QLabel *fpIcon = new QLabel(this);
    // fpIcon->setPixmap(QIcon(":/docs/favicon.ico").pixmap(48,48));

    QLabel *fpTitle = new QLabel(this);
    fpTitle->setText("仓库标题:");
    fpTitle->setAlignment(Qt::AlignBottom | Qt::AlignLeft);

    QLabel *fpUrl = new QLabel(this);
    fpUrl->setText("仓库路径:");
    fpUrl->setAlignment(Qt::AlignCenter | Qt::AlignLeft);

    QLabel *fpHomePage = new QLabel(this);
    fpHomePage->setText("仓库主页:");
    fpHomePage->setAlignment(Qt::AlignTop | Qt::AlignLeft);

    // QLabel *fpComment = new QLabel(this);
    // fpComment->setText("注释:");

    // QLabel *fpDescription = new QLabel(this);
    // fpDescription->setText("说明:");
    
    // QLabel *fpIcon = new QLabel(this);
    
    // QLabel *fpGPGKey = new QLabel(this);

    QGridLayout *itemInfoLayout = new QGridLayout;
    itemInfoLayout->addWidget(fpTitle, 0, 0);
    itemInfoLayout->addWidget(m_title, 0, 1);
    itemInfoLayout->addWidget(fpUrl, 1, 0);
    itemInfoLayout->addWidget(m_url, 1, 1);
    itemInfoLayout->addWidget(fpHomePage, 2, 0);
    itemInfoLayout->addWidget(m_homepage, 2, 1);
    itemInfoLayout->setSpacing(0);
    itemInfoLayout->setVerticalSpacing(5);
    itemInfoLayout->setHorizontalSpacing(5);
    itemInfoLayout->setMargin(0);

    QHBoxLayout *itemLayout = new QHBoxLayout;
    itemLayout->addStretch();
    itemLayout->addWidget(m_icon);
    itemLayout->addLayout(itemInfoLayout);
    itemLayout->addStretch();
    itemLayout->setSpacing(10);
    itemLayout->setContentsMargins(0,0,0,0);

    QVBoxLayout *contentLayout = new QVBoxLayout;
    contentLayout->addStretch();
    contentLayout->addLayout(itemLayout);
    contentLayout->addSpacing(30);
    contentLayout->addStretch();
    contentLayout->addWidget(m_description);
    // contentLayout->addWidget(m_gpgkey);
    contentLayout->setSpacing(0);
    contentLayout->setMargin(0);

    QHBoxLayout *centralLayout = new QHBoxLayout;
    centralLayout->addStretch();
    centralLayout->addLayout(contentLayout);
    centralLayout->addStretch();
    centralLayout->setSpacing(0);
    centralLayout->setContentsMargins(50, 20, 50, 20);

    setLayout(centralLayout);
    setAcceptDrops(true);


    connect(m_ni, &NetworkIcon::loaded, [=](QPixmap pixmap) {
        m_icon->setPixmap(pixmap);
    });
}

void FlatpakRepoWidget::parserFlatpakrepoFile(QString flatpakrepo)
{
    if (QFileInfo(flatpakrepo).isFile()) {
        QSettings config(flatpakrepo, QSettings::IniFormat);
        config.beginGroup("Flatpak Repo");
        m_title->setText(config.value("Title").toString());
        m_url->setText(config.value("Url").toString());
        m_homepage->setText(config.value("Homepage").toString());
        m_comment->setText(config.value("Comment").toString());
        m_description->setText(config.value("Description").toString());
        //            m_icon->setText(config.value("Icon").toString());
        QString icon = config.value("Icon").toString();
        if (!icon.isEmpty()) {
            m_ni->load(icon);
        } else {
            m_icon->setPixmap(QIcon::fromTheme("x").pixmap(m_icon->size()));
        }
        m_gpgkey->setText(config.value("GPGKey").toString());
    }
}


void FlatpakRepoWidget::dragEnterEvent(QDragEnterEvent *event) {
    auto * const mime = event->mimeData();
    if (!mime->hasUrls()) {
        return event->ignore();
    }
    return event->accept();    
}
// void dragMoveEvent(QDragMoveEvent *event);
// void dragLeaveEvent(QDragLeaveEvent *event);
void FlatpakRepoWidget::dropEvent(QDropEvent *event) {
    auto * const mime = event->mimeData();
    if (!mime->hasUrls()) {
        return event->ignore();
    }

    for (auto &url : mime->urls())
    {
        if (url.isLocalFile()) {
            QFileInfo info (url.toLocalFile());
            if (info.isFile() && info.suffix() == "flatpakrepo") {
                parserFlatpakrepoFile(url.toLocalFile());
            }
        }
    }
}

// void FlatpakRepoWidget::keyPressEvent(QKeyEvent *event) {
//     switch (event->key()) {
//         case Qt::Key_Escape: m_centralLayout->setCurrentIndex(0);   break;
//     default:;
//     }
// }
